﻿using MediatR;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using WMS.API.Application.Command.StocktakingManagement;
using WMS.Domain.Entities.StocktakingManagement;
using WMS.ErrorCode;

namespace WMS.API.Controllers.SystemUser
{
    /// <summary>
    /// 给客户充值控制器
    /// </summary>
    [Route("api/[controller]/[action]")]
    [ApiController]
    public class RechargeUserController : ControllerBase
    {
        /// <summary>
        /// MediatR服务，用于发送命令到对应的处理程序
        /// </summary>
        private readonly IMediator _mediator;
        /// <summary>
        /// 构造函数:初始化
        /// </summary>
        /// <param name="mediator">MediatR服务，用于发送命令到对应的处理程序</param>
        public RechargeUserController(IMediator mediator)
        {
            _mediator = mediator;
        }

        /// <summary>
        /// 给客户充值 - HTTP接口
        /// </summary>
        /// <param name="request">充值请求参数</param>
        /// <remarks>
        /// 业务逻辑：
        /// 1. 接收客户端提交的充值信息（用户编码、金额、支付方式等）
        /// 2. 通过MediatR将命令发送到对应的Handler进行业务处理
        /// 3. 自动验证请求参数（基于DataAnnotations）
        /// 4. 返回统一格式的API响应结果
        /// 
        /// 请求示例：
        /// POST /api/PendingOrders/AddRechargeUser
        /// {
        ///   "UserCode": "U001",
        ///   "Maney": "100",
        ///   "DepositMethod": "微信支付",
        ///   "Remark": "用户自充值"
        /// }
        /// </remarks>
        /// <returns>
        /// API统一响应结果：
        /// - Code: 业务状态码（Success/Fail）
        /// - Message: 操作结果描述
        /// - Data: 充值记录ID（成功时返回）
        /// </returns>
        [HttpPost]//http://localhost:5233/api/RechargeUser/AddRechargeUser
        [ProducesResponseType(typeof(APIResult<int>), 200)]//200 OK：操作成功，返回 APIResult<int>格式数据
        [ProducesResponseType(typeof(APIResult<int>), 400)]//400 BadRequest：模型验证失败（如参数格式错误）
        [ProducesResponseType(typeof(APIResult<int>), 500)]//500 InternalServerError：服务器内部错误
        public async Task<APIResult<int>> AddRechargeUser([FromBody] RechargeUserCommand request)
        {
            // 1. 自动模型验证（基于DataAnnotations）
            //    若验证失败，ASP.NET Core会自动返回400 BadRequest

            // 2. 通过MediatR发送命令到对应的Handler
            //    命令会被AddRechargeUserHandlers处理
            return await _mediator.Send(request);

            // 3. 返回结果由Handler处理，包含：
            //    - 成功：返回充值记录ID和成功消息
            //    - 失败：返回错误码和错误消息
        }
    }
}